<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="UTF-8">
    <title>Sucha's Blog - Archive for December, 2015</title>
    <meta name="generator" content="MarkdownProjectCompositor.lua">
    <meta name="author" content="Sucha">
    <meta name="keywords" content="suchang, programming, Linux, Lua">
    <meta name="description" content="Sucha's blog">
    <link rel="shortcut icon" href="../images/ico.png">
    <link rel="stylesheet" type="text/css" href="../styles/blog.css">
    <link rel="stylesheet" type="text/css" href="../styles/prism.min.css">
    <style id="site_theme"></style>
  </head>
  <body>
    <div id="body">
      <div id="text">
	   <!-- Page published by cmark-gfm begins here --><h1>Sucha's Blog ~ Archive for December, 2015</h1>
<p><a id="p0"></a></p>
<div class="date">15年12月9日 周三 23:41</div>
<h2>类 Shadowsocks 的 sock5 proxy － m_tunnel</h2>
<p>也是好奇，自己写了一个类似 shadowsocks 的 sock5 proxy，与其协议不一样，
local 跟 remote 是通过一个 TCP 连接起来的，两边的数据，都通过这个 TCP 连
接。</p>
<p>当时这么设计，是觉得，每次一个 TCP 过去，重新握手，认证，是个多么麻烦的
事情，如果之前已经认证好了，就走一个通道就行了，反正都有加密嘛，不过现在
看来，也许是麻烦的开端，因为这意味着需要下面的协议内容：</p>
<ul>
<li>connect</li>
<li>data</li>
<li>close</li>
</ul>
<p>data 部分就是切割数据，connect 部分意味着异步连接，close 也要保证同步，
而且任何一方都要关注到底是 server 还是 local 关闭的。</p>
<p>现在这个软件不太稳定，可是总感觉不是代码上面的问题，而是协议处理上，还需
要斟酌一下。</p>
<p>还有，其实如果是使用 shadowsocks 那样每个 local 进来的 tcp 都单独链接，
其实更容易处理些。</p>
<p>不扯了，地址是 <a href="https://github.com/lalawue/m_tunnel">https://github.com/lalawue/m_tunnel</a>.</p>
<div class="category"><a href="CategoryProgramming.html">CategoryProgramming</a> / <a href="2015-12.html#p0">Permalink</a> / <a href="https://github.com/lalawue/homepage/discussions/categories/blog" target="_blank">Discussion</a></div>
<!-- date: 2015-12-09T23:41:54+0800 -->
<!-- Page published by cmark-gfm ends here -->
  <div id="foot">2004-<script>var d = new
	Date();document.write(d.getFullYear())</script> &copy;
	Sucha. Powered by MarkdownProjectCompositor.
  </div>
  </div><!-- text -->
  <div id="sidebar">
  </div><!-- sidebar -->
  <script src="../js/prism.min.js" async="async"></script>
  <script src="../js/blog_sidebar.js"></script>
  </div> <!-- body -->
</body>
</html>